"""
面向对象和面向过程
    面向对象(oop):程序的运行所有的过程都是用来操作对象，通过对象的新建销毁来处理逻辑。java，python都是面向对象编程
    面向过程
    面向切面:
        spring里面还有一个理念就做aop-面向切面
        底层原理
        动态代理实现。
            Spring方法的bean的生命周期 init方法之后会调用BeanPostprocessor
            这个接口就是aop切面的最终接口。在一个bean做初始化的时候都会调用接口。实现aop切面的加载
                核心关键字:切入点，前置通知,后置通知，环绕通知
                实现@AspectJ
                    包含@Pointcut @Before @After @Around
"""
"""
类-class
    定义类:class Dog():
    实用类: java有new 关键字new  python直接调用这个类就能生成一个对象
    检查对象是否是一个类的实例 isinstance方法
类也是一个对象，是type类型的对象
类的三要数 id(hashCode),type(数据类型),value(值)
当我们实用类的时候，就创建一个type类型的对象    
"""
class Dog():
    pass

dog1=Dog()
print(dog1)
print(isinstance(dog1,Dog))

"""
使用类创建对象的流程-类似于java new操作的底层逻辑
    创建一个变量
    在内存中创建一个新对象
    在新对象中进行赋值
    将创建的对象的hashCode地址赋值给变量
    
    问题:这四步注意不是按照顺序一层不变的执行的，其中多线程环境下会出现步骤对调导致异常
        解决方式 
            volatile关键字 取消重排序这样new操作的时候就会按照步骤进行保证无异常
            volatile关键字还有一个作用是内存可见性，多线程之间使用对中的数据，使用volatile关键字可以保证互相可见
对象添加属性
    对象.属性
"""
dog1.name='bob'
print(dog1.name)

"""
类的定义-一个类不能想放什么就放什么 需要定义一个类按照规则存放属性
类的组成:
    属性，方法
"""